package Mundo;

import Interfaz.InterfazPostfixListas;

public class Evaluador 
{

	// -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------
	
	/**
	 * La pila
	 */
	private Stack stack;
	
	// -----------------------------------------------------------------
    // Constructores
    // -----------------------------------------------------------------
	
	/**
	 * Constructor del Evaluador
	 */
	public Evaluador()
	{
		stack = new StackAbstracto();
	}
	
	// -----------------------------------------------------------------
    // Métodos
    // -----------------------------------------------------------------
	
	/**
	 * Ingresa el número o evalúa cuando se le ingresa un operador
	 * @param Object elemento que se desea ingresar o evaluar
	 * @param boolean decide si es número (true) u operación (false)
	 */
	public void ingresar (Object elemento, boolean num) 
	{
		if (num)
			stack.push(elemento);
		else
		{
			int num1 = Integer.parseInt(stack.pop().toString());
			int num2 = Integer.parseInt(stack.pop().toString());
		
			if(elemento.equals("+"))
			{
				int resp = num2 + num1;
				stack.push(resp);
			}
		
			if(elemento.equals("-"))
			{
				int resp = num2 - num1;
				stack.push(resp);
			}
			
			if(elemento.equals("*"))
			{
				int resp = num2 * num1;
				stack.push(resp);
			}
			
			if(elemento.equals("/"))
			{
				int resp = num2 / num1;
				stack.push(resp);
			}
		}
	}
	
	/**
	 * Retorna el valor final en el stack
	 * @return int respuesta a la expresión Postfix
	 */
	public int calcular()
	{
		int resp = Integer.parseInt(stack.pop().toString());
		return resp;
	}
	
	/**
	 * Declara si la pila está vacía
	 * @return boolean true si está vacía
	 */
	public boolean isEmpty()
	{
		return stack.empty();
	}
	
	/**
	 * Da el tamaño actual de la pila 
	 * @return int
	 */
	public int tamano()
	{
		return stack.tamano();
	}
}

